package com.wmx.main.text01;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author:wmx 2025-03-28 11:12
 * 1、功能:
 * 2、参数{
 * <p>
 * <p>
 * }
 **/
public class Text01 {
    public static void main(String[] args) throws Exception {


        //    一、定义一个注解，应用于字段，方法，用于设置一个数值
        //
        //    创建一个学生类，有姓名和年龄两个字段，
        //    使用上面定义的注解设置年龄不能低于18岁，否则抛出异常
        //
        //    实例化学生对象，分别设置合法的年龄和非法的年龄，
        //    打印输出学生对象的相关信息
        //
        //    注意：根据结果看，这里的注解只应用在字段上面就好了！
        //
        //
        Student student = new Student();
        Class<?> studentClass = Student.class;
        Field studentAge = studentClass.getDeclaredField("age");
        studentAge.setAccessible(true);
        boolean annotationPresent = studentAge.isAnnotationPresent(StudentAnnotation.class);
        if (!annotationPresent) {
             throw new Exception("没有此注解");
           } else {
               StudentAnnotation annotation = studentAge.getAnnotation(StudentAnnotation.class);
               int  age = annotation.value();
               if(!(age >= 18 && age < 150)){
                   throw new Exception("年龄不能低于18岁");
               }else{
                   studentAge.set(student,age);
                   Method toString = studentClass.getMethod("toString");
                   System.out.println(toString.invoke(student));

               }
           }


    }
}
